export default {
    // 注册需要监听的事件
    getEvents() {
        return {
            'node:mouseover': 'onMouseover',   // 节点鼠标移入
            'node:mouseleave': 'onMouseleave', // 节点鼠标移出
            "node:mousedown": "onMousedown"  // 节点鼠标按下
        };
    },
    // 节点鼠标移入时的处理逻辑
    onMouseover(e) {
        const self = this;
        const item = e.item;
        const graph = self.graph;
        const group = item.getContainer()
        // 如果鼠标移入的是输出锚点或外部输出锚点
        if (e.target._attrs.isOutPointOut || e.target._attrs.isOutPoint) {
            group.find(g => {
                if (g._attrs.isInPoint || g._attrs.isOutPoint) {
                    g.attr("fill", "#fff")
                }
                if (g._attrs.isOutPoint) {
                    // 高亮当前锚点
                    if (g._attrs.id === e.target._attrs.parent) {
                        group.find(gr => {
                            if (gr._attrs.id === g._attrs.id) {
                                gr.attr('fill', "#1890ff")
                                gr.attr('opacity',1)
                            }
                        })
                    }
                    if (g._attrs.id === e.target._attrs.id) {
                        g.attr("fill", "#1890ff")
                        g.attr('opacity',1)
                    }

                }
            });
            // 设置鼠标样式为十字
            e.target.attr("cursor", "crosshair");
            this.graph.paint();
        }
        // 如果节点已被选中则不处理
        if (item.hasState('selected')) {
            return
        } else {
            // 判断是否允许更新状态
            if (self.shouldUpdate.call(self, e)) {
                graph.setItemState(item, 'hover', true);
            }
        }
        graph.paint();
    },
    // 节点鼠标移出时的处理逻辑
    onMouseleave(e) {
        const self = this;
        const item = e.item;
        const graph = self.graph;
        const group = item.getContainer()
        // 恢复所有锚点样式
        group.find(g => {
            if (g._attrs.isInPoint || g._attrs.isOutPoint) {
                g.attr("fill", "#fff")
            }
        });
        if (self.shouldUpdate.call(self, e)) {
            if(!item.hasState('selected'))
            graph.setItemState(item, 'hover', false);
        }
        graph.paint();
    },
    // 节点鼠标按下时的处理逻辑
    onMousedown(e) {
        // 如果按下的是输出锚点，则进入连线模式，否则进入节点拖动模式
        if(e.target._attrs.isOutPoint ||e.target._attrs.isOutPointOut){
            this.graph.setMode('addEdge')
        }else{
            this.graph.setMode('moveNode')
        }
    },

};
